home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / cmds / gdb-4.5 / dist / include / coff / ecoff-ext.h < prev    next >
Encoding:
C/C++ Source or Header  |  1992-04-03  |  7.3 KB  |  302 lines

  1. /* MIPS `ECOFF' symbol table external format.
  2.    Copyright 1992 Free Software Foundation.
  3.    Contributed by Cygnus Support.  Written by John Gilmore.
  4.  
  5. This file is part of GDB.
  6.  
  7. This program is free software; you can redistribute it and/or modify
  8. it under the terms of the GNU General Public License as published by
  9. the Free Software Foundation; either version 2 of the License, or
  10. (at your option) any later version.
  11.  
  12. This program is distributed in the hope that it will be useful,
  13. but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15. GNU General Public License for more details.
  16.  
  17. You should have received a copy of the GNU General Public License
  18. along with this program; if not, write to the Free Software
  19. Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
  20.  
  21. /* ECOFF uses COFF-like section structures, but its own symbol format.
  22.    This file defines the symbol format in fields whose size and alignment
  23.    will not vary on different host systems.  The bfd module coff-msym.c
  24.    converts between external and internal forms of this information,
  25.    deals with byte order issues, etc.  */
  26.  
  27. /* File header as a set of bytes */
  28.  
  29. struct hdr_ext {
  30.     char     h_magic[2];
  31.     char    h_vstamp[2];
  32.     char    h_ilineMax[4];
  33.     char    h_cbLine[4];
  34.     char    h_cbLineOffset[4];
  35.     char    h_idnMax[4];
  36.     char    h_cbDnOffset[4];
  37.     char    h_ipdMax[4];
  38.     char    h_cbPdOffset[4];
  39.     char    h_isymMax[4];
  40.     char    h_cbSymOffset[4];
  41.     char    h_ioptMax[4];
  42.     char    h_cbOptOffset[4];
  43.     char    h_iauxMax[4];
  44.     char    h_cbAuxOffset[4];
  45.     char    h_issMax[4];
  46.     char    h_cbSsOffset[4];
  47.     char    h_issExtMax[4];
  48.     char    h_cbSsExtOffset[4];
  49.     char    h_ifdMax[4];
  50.     char    h_cbFdOffset[4];
  51.     char    h_crfd[4];
  52.     char    h_cbRfdOffset[4];
  53.     char    h_iextMax[4];
  54.     char    h_cbExtOffset[4];
  55. };
  56.  
  57. /* File descriptor external record */
  58.  
  59. struct fdr_ext {
  60.     char    f_adr[4];
  61.     char    f_rss[4];
  62.     char    f_issBase[4];
  63.     char    f_cbSs[4];
  64.     char    f_isymBase[4];
  65.     char    f_csym[4];
  66.     char    f_ilineBase[4];
  67.     char    f_cline[4];
  68.     char    f_ioptBase[4];
  69.     char    f_copt[4];
  70.     char    f_ipdFirst[2];
  71.     char    f_cpd[2];
  72.     char    f_iauxBase[4];
  73.     char    f_caux[4];
  74.     char    f_rfdBase[4];
  75.     char    f_crfd[4];
  76.     char    f_bits1[1];
  77.     char    f_bits2[3];
  78.     char    f_cbLineOffset[4];
  79.     char    f_cbLine[4];
  80. };
  81.  
  82. #define    FDR_BITS1_LANG_BIG        0xF8
  83. #define    FDR_BITS1_LANG_SH_BIG        3
  84. #define    FDR_BITS1_LANG_LITTLE        0x1F
  85. #define    FDR_BITS1_LANG_SH_LITTLE    0
  86.  
  87. #define    FDR_BITS1_FMERGE_BIG        0x04
  88. #define    FDR_BITS1_FMERGE_LITTLE        0x20
  89.  
  90. #define    FDR_BITS1_FREADIN_BIG        0x02
  91. #define    FDR_BITS1_FREADIN_LITTLE    0x40
  92.  
  93. #define    FDR_BITS1_FBIGENDIAN_BIG    0x01
  94. #define    FDR_BITS1_FBIGENDIAN_LITTLE    0x80
  95.  
  96. #define    FDR_BITS2_GLEVEL_BIG        0xC0
  97. #define    FDR_BITS2_GLEVEL_SH_BIG        6
  98. #define    FDR_BITS2_GLEVEL_LITTLE        0x03
  99. #define    FDR_BITS2_GLEVEL_SH_LITTLE    0
  100.  
  101. /* We ignore the `reserved' field in bits2. */
  102.  
  103.  
  104. /* Procedure descriptor external record */
  105.  
  106. struct pdr_ext {
  107.     char    p_adr[4];
  108.     char    p_isym[4];
  109.     char    p_iline[4];
  110.     char    p_regmask[4];
  111.     char    p_regoffset[4];
  112.     char    p_iopt[4];
  113.     char    p_fregmask[4];
  114.     char    p_fregoffset[4];
  115.     char    p_frameoffset[4];
  116.     char    p_framereg[2];
  117.     char    p_pcreg[2];
  118.     char    p_lnLow[4];
  119.     char    p_lnHigh[4];
  120.     char    p_cbLineOffset[4];
  121. };
  122.  
  123. /* Line numbers */
  124.  
  125. struct line_ext {
  126.     char    l_line[4];
  127. };
  128.  
  129. /* Symbol external record */
  130.  
  131. struct sym_ext {
  132.     char    s_iss[4];
  133.     char    s_value[4];
  134.     char    s_bits1[1];
  135.     char    s_bits2[1];
  136.     char    s_bits3[1];
  137.     char    s_bits4[1];
  138. };
  139.  
  140. #define    SYM_BITS1_ST_BIG        0xFC
  141. #define    SYM_BITS1_ST_SH_BIG        2
  142. #define    SYM_BITS1_ST_LITTLE        0x3F
  143. #define    SYM_BITS1_ST_SH_LITTLE        0
  144.  
  145. #define    SYM_BITS1_SC_BIG        0x03
  146. #define    SYM_BITS1_SC_SH_LEFT_BIG    3
  147. #define    SYM_BITS1_SC_LITTLE        0xC0
  148. #define    SYM_BITS1_SC_SH_LITTLE        6
  149.  
  150. #define    SYM_BITS2_SC_BIG        0xE0
  151. #define    SYM_BITS2_SC_SH_BIG        5
  152. #define    SYM_BITS2_SC_LITTLE        0x07
  153. #define    SYM_BITS2_SC_SH_LEFT_LITTLE    2
  154.  
  155. #define    SYM_BITS2_RESERVED_BIG        0x10
  156. #define    SYM_BITS2_RESERVED_LITTLE    0x08
  157.  
  158. #define    SYM_BITS2_INDEX_BIG        0x0F
  159. #define    SYM_BITS2_INDEX_SH_LEFT_BIG    16
  160. #define    SYM_BITS2_INDEX_LITTLE        0xF0
  161. #define    SYM_BITS2_INDEX_SH_LITTLE    4
  162.  
  163. #define    SYM_BITS3_INDEX_SH_LEFT_BIG    8
  164. #define    SYM_BITS3_INDEX_SH_LEFT_LITTLE    4
  165.  
  166. #define    SYM_BITS4_INDEX_SH_LEFT_BIG    0
  167. #define    SYM_BITS4_INDEX_SH_LEFT_LITTLE    12
  168.  
  169. /* External symbol external record */
  170.  
  171. struct ext_ext {
  172.     char    es_bits1[1];
  173.     char    es_bits2[1];
  174.     char    es_ifd[2];
  175.     struct    sym_ext es_asym;
  176. };
  177.  
  178. #define    EXT_BITS1_JMPTBL_BIG        0x80
  179. #define    EXT_BITS1_JMPTBL_LITTLE        0x01
  180.  
  181. #define    EXT_BITS1_COBOL_MAIN_BIG    0x40
  182. #define    EXT_BITS1_COBOL_MAIN_LITTLE    0x02
  183.  
  184. #define    EXT_BITS1_WEAKEXT_BIG        0x20
  185. #define    EXT_BITS1_WEAKEXT_LITTLE    0x04
  186.  
  187. /* Type information external record */
  188.  
  189. struct tir_ext {
  190.     char    t_bits1[1];
  191.     char    t_tq45[1];
  192.     char    t_tq01[1];
  193.     char    t_tq23[1];
  194. };
  195.  
  196. #define    TIR_BITS1_FBITFIELD_BIG        0x80
  197. #define    TIR_BITS1_FBITFIELD_LITTLE    0x01
  198.  
  199. #define    TIR_BITS1_CONTINUED_BIG        0x40
  200. #define    TIR_BITS1_CONTINUED_LITTLE    0x02
  201.  
  202. #define    TIR_BITS1_BT_BIG        0x3F
  203. #define    TIR_BITS1_BT_SH_BIG        0
  204. #define    TIR_BITS1_BT_LITTLE        0xFC
  205. #define    TIR_BITS1_BT_SH_LITTLE        2
  206.  
  207. #define    TIR_BITS_TQ4_BIG        0xF0
  208. #define    TIR_BITS_TQ4_SH_BIG        4
  209. #define    TIR_BITS_TQ5_BIG        0x0F
  210. #define    TIR_BITS_TQ5_SH_BIG        0
  211. #define    TIR_BITS_TQ4_LITTLE        0x0F
  212. #define    TIR_BITS_TQ4_SH_LITTLE        0
  213. #define    TIR_BITS_TQ5_LITTLE        0xF0
  214. #define    TIR_BITS_TQ5_SH_LITTLE        4
  215.  
  216. #define    TIR_BITS_TQ0_BIG        0xF0
  217. #define    TIR_BITS_TQ0_SH_BIG        4
  218. #define    TIR_BITS_TQ1_BIG        0x0F
  219. #define    TIR_BITS_TQ1_SH_BIG        0
  220. #define    TIR_BITS_TQ0_LITTLE        0x0F
  221. #define    TIR_BITS_TQ0_SH_LITTLE        0
  222. #define    TIR_BITS_TQ1_LITTLE        0xF0
  223. #define    TIR_BITS_TQ1_SH_LITTLE        4
  224.  
  225. #define    TIR_BITS_TQ2_BIG        0xF0
  226. #define    TIR_BITS_TQ2_SH_BIG        4
  227. #define    TIR_BITS_TQ3_BIG        0x0F
  228. #define    TIR_BITS_TQ3_SH_BIG        0
  229. #define    TIR_BITS_TQ2_LITTLE        0x0F
  230. #define    TIR_BITS_TQ2_SH_LITTLE        0
  231. #define    TIR_BITS_TQ3_LITTLE        0xF0
  232. #define    TIR_BITS_TQ3_SH_LITTLE        4
  233.  
  234.  
  235. /* Relative symbol external record */
  236.  
  237. struct rndx_ext {
  238.     char    r_bits[4];
  239. };
  240.  
  241. #define    RNDX_BITS0_RFD_SH_LEFT_BIG    4
  242. #define    RNDX_BITS1_RFD_BIG        0xF0
  243. #define    RNDX_BITS1_RFD_SH_BIG        4
  244.  
  245. #define    RNDX_BITS0_RFD_SH_LEFT_LITTLE    0
  246. #define    RNDX_BITS1_RFD_LITTLE        0x0F
  247. #define    RNDX_BITS1_RFD_SH_LEFT_LITTLE    8
  248.  
  249. #define    RNDX_BITS1_INDEX_BIG        0x0F
  250. #define    RNDX_BITS1_INDEX_SH_LEFT_BIG    16
  251. #define    RNDX_BITS2_INDEX_SH_LEFT_BIG    8
  252. #define    RNDX_BITS3_INDEX_SH_LEFT_BIG    0
  253.  
  254. #define    RNDX_BITS1_INDEX_LITTLE        0xF0
  255. #define    RNDX_BITS1_INDEX_SH_LITTLE    4
  256. #define    RNDX_BITS2_INDEX_SH_LEFT_LITTLE    4
  257. #define    RNDX_BITS3_INDEX_SH_LEFT_LITTLE    12
  258.  
  259.  
  260. /* Dense numbers external record */
  261.  
  262. struct dnr_ext {
  263.     char    d_rfd[4];
  264.     char    d_index[4];
  265. };
  266.  
  267. /* Auxliliary symbol information external record */
  268.  
  269. union aux_ext {
  270.     struct tir_ext    a_ti;
  271.     struct rndx_ext    a_rndx;
  272.     char    a_dnLow[4];
  273.     char    a_dnHigh[4];
  274.     char    a_isym[4];
  275.     char    a_iss[4];
  276.     char    a_width[4];
  277.     char    a_count[4];
  278. };
  279.  
  280. /* FIXME!  These are copied from ../bfd/libbfd.h */
  281. PROTO (bfd_vma, _do_getb32, (unsigned char *addr));
  282. PROTO (bfd_vma, _do_getl32, (unsigned char *addr));
  283.  
  284. #define    AUX_GET_DNLOW(bigend, ax)    (bigend? _do_getb32 ((ax)->a_dnLow): \
  285.                          _do_getl32 ((ax)->a_dnLow))
  286. #define    AUX_GET_DNHIGH(bigend, ax)    (bigend? _do_getb32 ((ax)->a_dnHigh): \
  287.                          _do_getl32 ((ax)->a_dnHigh))
  288. #define    AUX_GET_ISYM(bigend, ax)    (bigend? _do_getb32 ((ax)->a_isym): \
  289.                          _do_getl32 ((ax)->a_isym))
  290. #define    AUX_GET_ISS(bigend, ax)        (bigend? _do_getb32 ((ax)->a_iss): \
  291.                          _do_getl32 ((ax)->a_iss))
  292. #define    AUX_GET_WIDTH(bigend, ax)    (bigend? _do_getb32 ((ax)->a_width): \
  293.                          _do_getl32 ((ax)->a_width))
  294. #define    AUX_GET_COUNT(bigend, ax)    (bigend? _do_getb32 ((ax)->a_count): \
  295.                          _do_getl32 ((ax)->a_count))
  296.  
  297. /* Relative file descriptor */
  298.  
  299. struct rfd_ext {
  300.   char    rfd[4];
  301. };
  302.